﻿
using System;
using System.Drawing;

using System.Collections.Generic;

using GECS.Object;

namespace GECS.Collision
{
	/// <summary>
	/// The template for the collision Engine
	/// </summary>
	public interface ICollisionEngine
	{
		
		/// <summary>
		/// Clear the objects in the engine. (Doesn't clear the MAP)
		/// </summary>
		void Clear();
		
		/// <summary>
		/// Inserts a GObject in to the engine.
		/// </summary>
		/// <param name="obj">The object to be added.</param>
		void Insert(GObject obj);
		
		/// <summary>
		/// Inserts a List of GObject's to the engine.
		/// </summary>
		/// <param name="objs">The list of objects.</param>
		void Insert(List<GObject> objs);
		
		/// <summary>
		/// Returns a list of objects that are likely collidable.
		/// </summary>
		/// <param name="obj">The object to be tested.</param>
		List<GObject> Retrieve(GObject obj);
		
		/// <summary>
		/// Returns a list of objects that are likely to be present
		/// in a rectangle.
		/// </summary>
		/// <param name="rect">The rectangle to be tested.</param>
		List<GObject> Retrieve(Rectangle rect);
		
		/// <summary>
		/// Sets the bounds of the visible area of the map.
		/// </summary>
		/// <param name="x">The x-coordinate of the top left point</param>
		/// <param name="y">The y-coordinate of the top left point</param>
		/// <param name="width">The width of the visible area</param>
		/// <param name="height">The height of the visible area</param>
		void SetBounds(int x, int y, int width, int height);
		
	}
}
